home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / WindowMaker / src / WindowMaker.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-29  |  12.0 KB  |  444 lines

  1. /*
  2.  *  Window Maker window manager
  3.  * 
  4.  *  Copyright (c) 1997, 1998 Alfredo K. Kojima
  5.  * 
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
  19.  *  USA.
  20.  */
  21.  
  22. #ifndef WINDOWMAKER_H_
  23. #define WINDOWMAKER_H_
  24.  
  25. #include "wconfig.h"
  26.  
  27. #include <assert.h>
  28.  
  29. #include "WINGs.h"
  30. #include "WUtil.h"
  31.  
  32. #if HAVE_LIBINTL_H && I18N
  33. # include <libintl.h>
  34. # define _(text) gettext(text)
  35. #else
  36. # define _(text) (text)
  37. #endif
  38.  
  39.  
  40.  
  41.  
  42. /* class codes */
  43. typedef enum {
  44.     WCLASS_UNKNOWN = 0,
  45.     WCLASS_WINDOW = 1,           /* managed client windows */
  46.     WCLASS_MENU = 2,           /* root menus */
  47.     WCLASS_APPICON = 3,
  48.     WCLASS_DUMMYWINDOW = 4,           /* window that holds window group leader */
  49.     WCLASS_MINIWINDOW = 5,
  50.     WCLASS_DOCK_ICON = 6,
  51.     WCLASS_PAGER = 7,
  52.     WCLASS_TEXT_INPUT = 8,
  53.     WCLASS_FRAME = 9
  54. } WClassType;
  55.  
  56.  
  57. /* generic window levels (a superset of the N*XTSTEP ones) */
  58. enum {
  59.     WMDesktopLevel = 0,
  60.     WMSunkenLevel = 1,
  61.     WMNormalLevel = 2,
  62.     WMFloatingLevel = 3,
  63.     WMDockLevel = 4,
  64.     WMSubmenuLevel = 5,
  65.     WMMainMenuLevel = 6,
  66.     WMOuterSpaceLevel = 7
  67. };
  68.  
  69. /*
  70.  * WObjDescriptor will be used by the event dispatcher to
  71.  * send events to a particular object through the methods in the 
  72.  * method table. If all objects of the same class share the
  73.  * same methods, the class method table should be used, otherwise
  74.  * a new method table must be created for each object.
  75.  * It is also assigned to find the parent structure of a given
  76.  * window (like the WWindow or WMenu for a button)
  77.  */
  78.  
  79. typedef struct WObjDescriptor {
  80.     void *self;                   /* the object that will be called */    
  81.                        /* event handlers */
  82.     void (*handle_expose)(struct WObjDescriptor *sender, XEvent *event);
  83.     
  84.     void (*handle_mousedown)(struct WObjDescriptor *sender, XEvent *event);
  85.  
  86.     void (*handle_anything)(struct WObjDescriptor *sender, XEvent *event);
  87.  
  88.     void (*handle_enternotify)(struct WObjDescriptor *sender, XEvent *event);
  89.     void (*handle_leavenotify)(struct WObjDescriptor *sender, XEvent *event);
  90.  
  91.     WClassType parent_type;           /* type code of the parent */
  92.     void *parent;               /* parent object (WWindow or WMenu) */
  93. } WObjDescriptor;
  94.  
  95.  
  96. /* shutdown modes */
  97. typedef enum {
  98.     WSExitMode,
  99.     WSLogoutMode,
  100.     WSKillMode,
  101.     WSRestartPreparationMode
  102. } WShutdownMode;
  103.  
  104.  
  105. /* internal buttons */
  106. #define WBUT_CLOSE              0
  107. #define WBUT_BROKENCLOSE        1
  108. #define WBUT_ICONIFY            2
  109. #define WBUT_KILL        3
  110. #ifdef XKB_BUTTON_HINT
  111. #define WBUT_XKBGROUP1      4
  112. #define WBUT_XKBGROUP2      5
  113. #define WBUT_XKBGROUP3      6
  114. #define WBUT_XKBGROUP4      7
  115. #define PRED_BPIXMAPS        8 /* reserved for 4 groups */
  116. #else
  117. #define PRED_BPIXMAPS        4 /* count of WBUT icons */
  118. #endif /* XKB_BUTTON_HINT */
  119.  
  120. /* cursors */
  121. #define WCUR_DEFAULT    0
  122. #define WCUR_NORMAL     0
  123. #define WCUR_MOVE    1
  124. #define WCUR_RESIZE    2
  125. #define WCUR_TOPLEFTRESIZE    3
  126. #define WCUR_TOPRIGHTRESIZE    4
  127. #define WCUR_BOTTOMLEFTRESIZE    5
  128. #define WCUR_BOTTOMRIGHTRESIZE    6
  129. #define WCUR_VERTICALRESIZE 7
  130. #define WCUR_HORIZONRESIZE 8
  131. #define WCUR_WAIT    9
  132. #define WCUR_ARROW    10
  133. #define WCUR_QUESTION    11
  134. #define WCUR_TEXT    12
  135. #define WCUR_SELECT    13
  136. #define WCUR_ROOT    14
  137. #define WCUR_LAST   15
  138.  
  139. /* geometry displays */
  140. #define WDIS_NEW    0           /* new style */
  141. #define WDIS_CENTER    1           /* center of screen */
  142. #define WDIS_TOPLEFT    2           /* top left corner of screen */
  143. #define WDIS_FRAME_CENTER 3           /* center of the frame */
  144.  
  145.  
  146. /* keyboard input focus mode */
  147. #define WKF_CLICK    0
  148. #define WKF_POINTER    1
  149. #define WKF_SLOPPY    2
  150.  
  151. /* window placement mode */
  152. #define WPM_MANUAL    0
  153. #define WPM_CASCADE    1
  154. #define WPM_SMART    2
  155. #define WPM_RANDOM    3
  156. #define WPM_AUTO        4
  157.  
  158. /* text justification */
  159. #define WTJ_CENTER    0
  160. #define WTJ_LEFT    1
  161. #define WTJ_RIGHT    2
  162.  
  163. /* iconification styles */
  164. #define WIS_ZOOM        0
  165. #define WIS_TWIST       1
  166. #define WIS_FLIP        2
  167. #define WIS_NONE        3
  168. #define WIS_RANDOM    4 /* secret */
  169.  
  170. /* switchmenu actions */
  171. #define ACTION_ADD    0
  172. #define ACTION_REMOVE    1
  173. #define ACTION_CHANGE    2
  174. #define ACTION_CHANGE_WORKSPACE 3
  175. #define ACTION_CHANGE_STATE    4
  176.  
  177.  
  178. /* speeds */
  179. #define SPEED_ULTRAFAST 0
  180. #define SPEED_FAST    1
  181. #define SPEED_MEDIUM    2
  182. #define SPEED_SLOW    3
  183. #define SPEED_ULTRASLOW 4
  184.  
  185.  
  186. /* window states */
  187. #define WS_FOCUSED    0
  188. #define WS_UNFOCUSED    1
  189. #define WS_PFOCUSED    2
  190.  
  191. /* clip title colors */
  192. #define CLIP_NORMAL    0
  193. #define CLIP_COLLAPSED 1
  194.  
  195.  
  196. /* icon yard position */
  197. #define    IY_VERT        1
  198. #define    IY_HORIZ    0
  199. #define    IY_TOP        2
  200. #define    IY_BOTTOM    0
  201. #define    IY_RIGHT    4
  202. #define    IY_LEFT        0
  203.  
  204.  
  205. /* menu styles */
  206. #define MS_NORMAL        0
  207. #define MS_SINGLE_TEXTURE    1
  208. #define MS_FLAT            2
  209.  
  210.  
  211. /* workspace display position */
  212. #define WD_NONE        0
  213. #define WD_CENTER    1
  214. #define WD_TOP        2
  215. #define WD_BOTTOM    3
  216. #define WD_TOPLEFT    4
  217. #define WD_TOPRIGHT    5
  218. #define WD_BOTTOMLEFT    6
  219. #define WD_BOTTOMRIGHT    7
  220.  
  221.  
  222. /* program states */
  223. #define WSTATE_NORMAL        0
  224. #define WSTATE_NEED_EXIT    1
  225. #define WSTATE_NEED_RESTART    2
  226. #define WSTATE_EXITING        3
  227. #define WSTATE_RESTARTING    4
  228. #define WSTATE_MODAL        5
  229.  
  230.  
  231. #define WCHECK_STATE(state)    (state == WProgramState)
  232. #define WCHANGE_STATE(nstate)    \
  233.     if (WProgramState == WSTATE_NORMAL\
  234.         || nstate != WSTATE_MODAL)\
  235.          WProgramState = (nstate)
  236.  
  237.  
  238. /* notifications */
  239.  
  240. #ifdef MAINFILE
  241. #define NOTIFICATION(n) char *WN##n = #n
  242. #else
  243. #define NOTIFICATION(n) extern char *WN##n
  244. #endif
  245.  
  246. NOTIFICATION(WindowAppearanceSettingsChanged);
  247.  
  248. NOTIFICATION(IconAppearanceSettingsChanged);
  249.  
  250. NOTIFICATION(IconTileSettingsChanged);
  251.  
  252. NOTIFICATION(MenuAppearanceSettingsChanged);
  253.  
  254. NOTIFICATION(MenuTitleAppearanceSettingsChanged);
  255.  
  256.  
  257. /* appearance settings clientdata flags */
  258. enum {
  259.     WFontSettings = 1 << 0,
  260.     WTextureSettings = 1 << 1,
  261.     WColorSettings = 1 << 2
  262. };
  263.  
  264.  
  265.  
  266. typedef struct {
  267.     int x1, y1;
  268.     int x2, y2;
  269. } WArea;
  270.  
  271. typedef struct WCoord {
  272.     int x, y;
  273. } WCoord;
  274.  
  275. typedef struct WPreferences {
  276.     char *pixmap_path;               /* : separate list of */
  277.                        /* paths to find pixmaps */
  278.     char *icon_path;               /* : separated list of */
  279.                        /* paths to find icons */
  280.     
  281.     char *logger_shell;               /* shell to log child stdi/o */
  282.  
  283.     RImage *button_images;           /* titlebar button images */
  284.  
  285.     char smooth_workspace_back;
  286.     signed char size_display;               /* display type for resize geometry */
  287.     signed char move_display;               /* display type for move geometry */
  288.     signed char window_placement;           /* window placement mode */
  289.     signed char colormap_mode;               /* colormap focus mode */
  290.     signed char focus_mode;               /* window focusing mode */
  291.     
  292.     char opaque_move;               /* update window position during */
  293.                        /* move */
  294.  
  295.     char wrap_menus;               /* wrap menus at edge of screen */
  296.     char scrollable_menus;           /* let them be scrolled */
  297.     char align_menus;               /* align menu with their parents */
  298.     
  299.     char use_saveunders;           /* turn on SaveUnders for menus,
  300.                     * icons etc. */ 
  301.     char no_window_over_dock;
  302.  
  303.     char no_window_over_icons;
  304.  
  305.     WCoord window_place_origin;           /* Offset for windows placed on
  306.                                         * screen */
  307.  
  308.     char constrain_window_size;           /* don't let windows get bigger than 
  309.                     * screen */
  310.  
  311.     char circ_raise;               /* raise window after Alt-tabbing */
  312.  
  313.     char ignore_focus_click;
  314.  
  315.     char open_transients_with_parent;  /* open transient window in
  316.                     same workspace as parent */
  317.     signed char title_justification;           /* titlebar text alignment */
  318.  
  319.     int window_title_clearance;
  320.     int menu_title_clearance;
  321.     int menu_text_clearance;
  322.  
  323.     char multi_byte_text;
  324. #ifdef KEEP_XKB_LOCK_STATUS
  325.     char modelock;
  326. #endif
  327.  
  328.     char no_dithering;               /* use dithering or not */
  329.     
  330.     char no_sound;               /* enable/disable sound */
  331.     char no_animations;               /* enable/disable animations */
  332.     
  333.     char no_autowrap;               /* wrap workspace when window is moved
  334.                     * to the edge */
  335.     
  336.     char auto_arrange_icons;           /* automagically arrange icons */
  337.     
  338.     char icon_box_position;           /* position to place icons */
  339.     
  340.     signed char iconification_style;          /* position to place icons */
  341.     
  342.     char disable_root_mouse;           /* disable button events in root window */
  343.     
  344.     char auto_focus;               /* focus window when it's mapped */
  345.  
  346.  
  347.     char *icon_back_file;           /* background image for icons */
  348.  
  349.     WCoord *root_menu_pos;           /* initial position of the root menu*/
  350.     WCoord *app_menu_pos;
  351.  
  352.     WCoord *win_menu_pos;
  353.     
  354.     signed char icon_yard;               /* aka iconbox */
  355.  
  356.     int raise_delay;               /* delay for autoraise. 0 is disabled */
  357.  
  358.     int cmap_size;               /* size of dithering colormap in colors
  359.                     * per channel */
  360.  
  361.     int icon_size;               /* size of the icon */
  362.  
  363.     signed char menu_style;           /* menu decoration style */
  364.  
  365.     signed char workspace_name_display_position;
  366.     
  367.     unsigned int modifier_mask;           /* mask to use as kbd modifier */
  368.  
  369.  
  370.     char ws_advance;                   /* Create new workspace and advance */
  371.  
  372. #ifdef VIRTUAL_DESKTOP
  373.     unsigned int vedge_thickness;
  374.     unsigned int vedge_hscrollspeed;
  375.     unsigned int vedge_vscrollspeed;
  376.     unsigned int vedge_height; /* could be change to workspace specific one day */
  377.     unsigned int vedge_width;
  378. #endif
  379.  
  380.     char ws_cycle;                     /* Cycle existing workspaces */
  381.  
  382.     char save_session_on_exit;           /* automatically save session on exit */
  383.  
  384.     char sticky_icons;               /* If miniwindows will be onmipresent */
  385.  
  386.     char dont_confirm_kill;           /* do not confirm Kill application */
  387.  
  388.     char disable_miniwindows;
  389.  
  390.     char dont_blink;               /* do not blink icon selection */
  391.     
  392.     /* Appearance options */
  393.     char new_style;               /* Use newstyle buttons */
  394.     char superfluous;               /* Use superfluous things */
  395.  
  396.     /* root window mouse bindings */
  397.     signed char select_button;               /* button for window selection */
  398.     signed char windowl_button;           /* button for window list menu */
  399.     signed char menu_button;               /* button for app menu */
  400.  
  401.     /* balloon text */
  402.     char window_balloon;
  403.     char miniwin_balloon;
  404.     char appicon_balloon;
  405.     char help_balloon;
  406.         
  407.     /* some constants */
  408.     int dblclick_time;               /* double click delay time in ms */
  409.  
  410.     /* animate menus */
  411.     signed char menu_scroll_speed;           /* how fast menus are scrolled */
  412.  
  413.     /* animate icon sliding */
  414.     signed char icon_slide_speed;           /* icon slide animation speed */
  415.  
  416.     /* shading animation */
  417.     signed char shade_speed;
  418.  
  419.     int edge_resistance;
  420.     char attract;
  421.  
  422.     struct {
  423.         unsigned int nodock:1;           /* don't display the dock */
  424.         unsigned int noclip:1;        /* don't display the clip */
  425.     unsigned int nocpp:1;           /* don't use cpp */
  426.     unsigned int noupdates:1;      /* don't require ~/GNUstep (-static) */
  427.     unsigned int noautolaunch:1;   /* don't autolaunch apps */
  428.     unsigned int norestore:1;      /* don't restore session */
  429.     } flags;                   /* internal flags */
  430. } WPreferences;
  431.  
  432.  
  433.  
  434. /****** Global Variables  ******/
  435. extern Display    *dpy;
  436. extern char *ProgName;
  437. extern unsigned int ValidModMask;
  438. extern char WProgramState;
  439.  
  440. /****** Global Functions ******/
  441. extern void wAbort(Bool dumpCore);
  442.  
  443. #endif
  444.